package com.woniuxy.goods.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.woniuxy.goods.dto.GoodsDto;
import com.woniuxy.goods.entity.Goods;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniuxy.goods.param.AddGoodsParam;
import com.woniuxy.goods.param.AddGoodsPictureParam;
import com.woniuxy.goods.param.FindGoodsPageParam;
import com.woniuxy.goods.param.UpdateGoodsParam;
import org.springframework.web.multipart.MultipartFile;

import java.util.Set;

/**
 * <p>
 *  服务类
 * </p>
 * 典当物品管理服务层接口
 * @author ...
 * @since 2024年05月22日
 */
public interface GoodsService extends IService<Goods> {

    /**
     * 新增典当物品
     * @param param 新增典当物品对象
     * @return 典当物品对象
     * @throws Exception
     */
    GoodsDto addGoods(AddGoodsParam param) throws Exception;

    /**
     * 上传鉴定图
     * @param param 新增物品鉴定图参数对象
     * @param picture 定义图文件
     * @return 鉴定图地址
     * @throws Exception
     */
    String addGoodsPicture(AddGoodsPictureParam param, MultipartFile picture) throws Exception;

    /**
     * 保存物品
     * @param accountId 账号id
     * @return 物品dto对象
     * @throws Exception
     */
    GoodsDto saveGoods(Integer accountId) throws Exception;

    /**
     * 修改典当物品状态
     * @param goodsId 典当物品对象id
     * @param stateNUm 状态码
     * @return 典当物品对象
     * @throws Exception
     */
    GoodsDto updateGoodsStateNum(Integer goodsId, Integer stateNUm) throws Exception;

    /**
     * 修改典当物品
     * @param goods 典当物品对象
     * @return 典当物品对象
     * @throws Exception
     */
    GoodsDto updateGoodsByEntity(Goods goods) throws Exception;

    /**
     * 修改典当物品流程
     * @param goodsId 典当物品对象id
     * @param stateNUm 状态码
     * @param accountId 当前登录账号id
     * @return 典当物品对象
     * @throws Exception
     */
    GoodsDto updateGoodsProcess(Integer goodsId, Integer stateNUm,Integer accountId) throws Exception;

    /**
     * 修改典当物品
     * @param param 修改典当物品对象
     * @return 典当物品对象
     * @throws Exception
     */
    GoodsDto updateGoods(UpdateGoodsParam param) throws Exception;

    /**
     * 修改鉴定图
     * @param id 修改物品鉴定图id
     * @param goodsId 物品id
     * @param picture 定义图文件
     * @param accountId 当前登录管理员id
     * @return 鉴定图地址
     * @throws Exception
     */
    String modifyGoodsPicture(Integer accountId, Integer goodsId, Integer id,MultipartFile picture) throws Exception;

    /**
     * 根据id查找典当物品
     * @param goodsId 典当物品id
     * @return 典当物品对象
     * @throws Exception
     */
    Goods findById(Integer goodsId) throws Exception;

    /**
     * 根据id查找典当物品
     * @param goodsId 典当物品id
     * @return 典当物品对象
     * @throws Exception
     */
    GoodsDto findGoodsById(Integer goodsId) throws Exception;

    /**
     * 根据ids查找物品
     * @param param 物品id集合
     * @return 典当物品对象分页对象
     * @throws Exception
     */
    IPage<GoodsDto> findGoodsByIds(FindGoodsPageParam param) throws Exception;

    /**
     * 条件分页查找物品
     * @param param 典当物品分页查询对象
     * @return 典当物品对象分页对象
     * @throws Exception
     */
    IPage<GoodsDto> findGoodsPage(FindGoodsPageParam param) throws Exception;
}
